package com.cskaoyan.javase.oop2._1extends._10final._3variable._3static;

/**
 * final修饰静态成员变量,表示静态常量
 * 静态成员变量在整个类的全局是独一份,也称之为"全局变量"
 * 静态成员常量在整个类的全局也是独一份的且取值不变,所以我们称之为"全局常量"
 * 全局常量是一个真正意义上的常量,因为它独一份且不可变,是开发中最常见使用final的场景.
 *
 * 语法: [访问权限修饰符] static final 数据类型 变量名;
 * 解释:
 *      1.全局常量,它的赋值也是只能赋值一次,且之后不可改变,所以默认初始化就不再生效了
 *      2.除开默认初始化,静态成员变量在类加载过程中的赋值方式还有:
 *              a.显式赋值
 *              b,静态代码块
 *      以上两种赋值方式必须选择其一,而且也只能选择其一.
 *
 * 注意事项:
 *      1.一般来说,全局常量是一个真正意义上的常量,它是不害怕被外界访问
 *          所以全局常量的访问权限往是public(这不是固定的,只是说常用)
 *
 *      2.语法格式,static final还是final static无所谓的
 *
 *      3.如果使用静态代码块测试类加载，那么访问类的全局常量，有些场景是不会触发类加载的。（感兴趣自己测试一下，作为锻炼动手能力的小demo）
 *
 * @since 17:25
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(Cat.AGE);
        System.out.println(Cat.PRICE);
        // Cat.AGE = 10;
    }
}

class Cat {
    // Variable 'price' might not have been initialized
    public final static double PRICE = 1000;
    final static int AGE;

    static {
        AGE = 3;
    }
    /*{
        AGE = 3;
    }*/
}
